<?php

App::uses('AppController', 'Controller');

class CategoriesController extends AppController {

	var $name = 'Categories';
	var $uses = array('Category', 'Image');


	/**
	 * Danh Sach menu con
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function lists($parent_id) {
		$this->set('items', $this->Category->getAll( (int)$parent_id));
		$this->set('cate_id', $parent_id);
		$this->set('category', $this->Category->read(array('id','name', 'als', 'desc'), (int)$parent_id));
		$this->set('images', $this->Image->getAll( 'Category' . $parent_id));
		$this->set('als', 'Category');
	}

	/**
	 * Danh sanh list by parent
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function getListByParent($parent_id) {
		$this->_responseJson(array('cates' => $this->Category->getAll($parent_id)));
	}

	/**
	 * Danh sach danh muc
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_index() {
		App::uses('Codetbl', 'Model');
		$Codetbl = new Codetbl();
		$items = $this->Category->getAll(null, null, array(4,5));
		foreach($items as $k => $v) {
			$v['Category']['childs'] = $this->Category->getAll($v['Category']['id'], null, array(4,5));
			$items[$k] = $v;
		}
		$this->set('delete', true);
		$this->set('items', $items);
		$this->set('status', $Codetbl->getList('COM', 'STS'));

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Danh Mục'));
        $this->set('main_page_description', __('Quản lý thông tin các danh mục'));

		$breadcrumb = array( array('name' => __('Danh Mục'), 'url' => '') );
		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 * Add
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_add($id = null)
	{
		if(!empty($this->request->data))
		{
			$data = &$this->request->data[$this->als];

			$this->Category->set($data);
			$errors = $this->Category->invalidFields();

			//Save
			if(empty($errors)) {

				// kiem tra edit
				if( empty($data['id']) ) {
					unset($data['id']);
					$data['status'] = 4;
				} else {
					$data['id'] = (int)$data['id'];
				}

				$data['parent_id'] = (int)$data['parent_id'];

				if($this->Category->save($data, false)) {
					$this->Session->setFlash('Lưu danh mục thành công.', 'success');
					if( empty($data['id']) ) {
						unset($data['name']);
						unset($data['als']);
						unset($data['sort']);
						unset($data['desc']);
						unset($data['id']);
					} else {
						$this->redirect('/admin' );
					}
				} else {
					$this->Session->setFlash('Lưu danh mục thất bại. Vui lòng xem lại thông tin bên dưới', 'error');
				}
			} else {
				$this->Session->setFlash('Lưu danh mục thất bại.', 'error');
			}
		}

		// Truong hop show edit
		if( !empty( $id )) {
			$info = $this->Category->getInfoById($id);
			if(!empty($info)) {
				$this->request->data = $info;
			}
		}

		$this->set('category_lists', $this->Category->getList());

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Danh Mục'));
        $this->set('main_page_description', __('Quản lý thông tin các danh mục'));

        $breadcrumb = array(
			array('name' => 'Danh Mục', 'url' => 'categories'),
			array('name' => !empty( $id ) ? 'Sửa' : 'Thêm mới')
		);
		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 * Xem chi tiet
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_info($id = null) {
		if(!empty($id)) {
			$info = $this->Category->read(null, (int)$id);
			$info[$this->als]['parent_name'] = '';
			if($info[$this->als]['parent_id'] != 0) {
				$parent = $this->Category->read(array('name'), (int)$info[$this->als]['parent_id']);
				$info[$this->als]['parent_name'] = $parent[$this->als]['name'];
			}

			App::uses('Codetbl', 'Model');
			$Codetbl = new Codetbl();
			$this->set('status', $Codetbl->getList('COM', 'STS'));

			$this->set('info', $info);
			$this->set('childs', $this->Category->getAll((int)$id));
		} else {
			$this->Session->setFlash('Không tìm thấy danh mục.', 'error');
			$this->redirect(array('action' => 'admin_index'));
		}

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Danh Mục'));
        $this->set('main_page_description', __('Quản lý thông tin các danh mục'));

        $breadcrumb = array(
			array('name' => 'Danh Mục', 'url' => 'categories'),
			array('name' => 'Xem thông tin')
		);
		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 * delete san pham
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function _delete($id = null){

		if(!empty($id)) {
			$id = (int)$id;
			if( $this->Category->delete($id)) {
				App::uses('Product', 'Model');
				$P = new Product();
				$childs = $this->Category->getAll($id, 'asc', array(4,5));

				// Delete danh muc con
				$this->Category->deleteAll(array('parent_id' => $id));

				// xoa san pham danh muc cha
				$this->_deleteProduct($id, $P);

				// Xoa san pham cua danh muc conx
				if(!empty($childs))
				foreach($childs as $c ) {
					$this->_deleteProduct($c[$this->als]['id'], $P);
				}

				$this->Session->setFlash('Xóa danh mục thành công.', 'success');
			} else {
				$this->Session->setFlash('Xóa danh mục thất bại. Vui lòng thử lại sao', 'error');
			}
		} else {
			$this->Session->setFlash('Không tìm thấy danh mục. Vui lòng thử lại sao', 'error');
		}
		$this->redirect('/admin');
	}

	/**
	 * delete product
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function _deleteProduct($cate_id, $P) {
		if(empty($P)) {
				App::uses('Product', 'Model');
				$P = new Product();
			}
		// Xoa product
		$products = $P->getList($cate_id);
		$this->Common->_delProductByListId(array_values($products), $P, $this->Image);
	}

	/**
	 * Change status
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_changStatus(){
		if(!empty($this->request->data)) {
			$data = &$this->request->data[$this->als];
			if(!empty($data['id']) && !empty($data['status'])) {
				if($data['status'] == 9) {
					$this->_delete($data['id']);
				} else {
					$this->Category->id = (int)$data['id'];
					if( $this->Category->saveField('status', (int)$data['status']) ){

					} else {
						$this->Session->setFlash('Thay đổi trạng thái danh mục thất bại', 'error');
					}
				}
			} else {
				$this->Session->setFlash('Dự liệu không hợp lệ', 'error');
			}
		} else {
			$this->Session->setFlash('Dự liệu không hợp lệ', 'error');
		}

		$this->redirect(array('action' => 'admin_index'));
	}


}
